In [1]:
import numpy as np
%matplotlib notebook
import matplotlib.pyplot as plt
import ipywidgets as widgets
from maux import init_subplot, smart_ticklabel
from mtest import true_false_test

Derivácia funkcie

V nasledujúcich príkladoch budeme kresliť grafy elementárnych funkcií spolu s ich deriváciami. To, že derivácia je správne vyrátaná, budeme overovať graficky. Skúška správnosti pozostáva z nakreslenia dotyčnice grafu funkcie pre vybrané body. Predpis pre dotyčnicu grafu funkcie $f$ v bode $[a,f(a)]$ má tvar $$y = f'(a) (x-a) + f(a).$$

Dokumentácia:

Základné pravidlá pre derivovanie funkcií

Ak funkcie $f$, $g$ majú deriváciu v bode $a$, tak aj funkcie $c \cdot f$ ($c$ je reálna konštanta), $f + g$, $f - g$, $f \cdot g$ majú v bode $a$ deriváciu a platí \begin{align} (c \cdot f)'(a) & = c \cdot f'(a), \\ (f + g)'(a) & = f'(a) + g'(a), \\ (f - g)'(a) & = f'(a) - g'(a), \\ (f \cdot g)'(a) & = f'(a) \cdot g(a) + f(a) \cdot g'(a). \end{align} Ak naviac $g(a) \ne 0$, majú v bode $a$ deriváciu aj funkcie $1/g$, $f/g$ a platí \begin{align} \left(\frac{1}{g}\right)'(a) & = \frac{g'(a)}{g^2(a)}, \\ \left(\frac{f}{g}\right)'(a) & = \frac{f'(a) \cdot g(a) - f(a) \cdot g'(a)}{g^2(a)}. \end{align}

Derivácia zloženej funkcie

Ak funkcia $f$ má deriváciu v bode $a$, funkcia $g$ deriváciu v bode $f(a)$ a zložená funkcia $h = g \circ f$ je definovaná v okolí bodu $a$, tak $h$ má v bode $a$ deriváciu a platí \begin{align} h'(a) & = f'(a) \cdot g'(f(a)). \end{align}

Úloha

Nájdite derivácie nasledujúcich funkcií: \begin{align} y & = \frac{3}{5}x^{\frac{5}{3}}-x^{-\sqrt{5}}, \\ y & = \frac{1+x-x^2}{1-x+x^2}, \\ y & = (3x-7)^{10}, \\ y & = \sin(\cos^2 x)\cdot\cos(\sin^2 x), \\ y & = \frac{\sin^2 x}{\sin x^2}, \\ y & = \ln(x+\sqrt{x^2+1}), \\ y & = x^x \qquad x > 0, \\ y & = (\cos x)^{(\sin x)}+(\sin x)^{(\cos x)} \qquad x \in \left(0,\frac{\pi}{2}\right). \end{align} Overte graficky, že vaše riešenie je správne.

In [2]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return 3/5 * X ** (5/3) - X ** (-np.sqrt(5))
X = np.linspace(0, 5, 5*100+1)
X = X[X > 0] # len kladné čísla patria do oboru definície

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(6, 6)

## diagram
init_subplot(ax)
ax.set_ylim(-10, 10)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \frac{3}{5}x^{\frac{5}{3}}-x^{-\sqrt{5}}$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [3]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return (1 + X - X ** 2) / (1 - X + X ** 2)
X = np.linspace(-4, 4, 8*10+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(8, 6)

## diagram
init_subplot(ax)
ax.set_aspect('equal')
ax.set_ylim(-3, 3)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \frac{1+x-x^2}{1-x+x^2}$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [4]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return (3 * X - 7) ** 10
X = np.linspace(7/3-1/3, 7/3+1/3, 2*100+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(4, 6)

## diagram
init_subplot(ax, 2, 0)
ax.set_aspect(1/2)
ax.set_ylim(-1.1, 1.1)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = (3x-7)^{10}$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [5]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return np.sin(np.cos(X) ** 2) * np.cos(np.sin(X) ** 2)
X = np.linspace(-2*np.pi, 2*np.pi, 4*100+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 2.5)

## diagram
init_subplot(ax)
ax.set_aspect('equal')
ax.set_ylim(-1.2, 1.2)

## x-ová os
xtick_numerators = range(-4, 4+1)
ax.set_xticks([n * np.pi / 2  for n in xtick_numerators])
ax.set_xticklabels([smart_ticklabel(n, r"\pi", 2)  for n in xtick_numerators])

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \sin(\cos^2\,x)\cdot\cos(\sin^2\,x)$")

### riešenie

## derivácia
# def df(X): return None # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [6]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return np.sin(X) ** 2 / np.sin(X ** 2)
X = np.linspace(-np.pi-np.pi/8, np.pi+np.pi/8, 18*10000+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 7)

## diagram
init_subplot(ax)
ax.set_aspect('equal')
ax.set_ylim(-3.3, 3.3)

## x-ová os
xtick_numerators = range(-4, 4+1)
ax.set_xticks([n * np.pi / 4  for n in xtick_numerators])
ax.set_xticklabels([smart_ticklabel(n, r"\pi", 4)  for n in xtick_numerators])

## potrebné pre určenie definičného oboru funkcie
ps = [X[0], -np.sqrt(3*np.pi), -np.sqrt(2*np.pi), -np.sqrt(np.pi), 0, np.sqrt(np.pi), np.sqrt(2*np.pi), np.sqrt(3*np.pi), X[-1]]

## graf funkcie
color = ax.plot([], [], label=r"funkcia $y = \frac{\sin^2\,x}{\sin\,x^2}$")[0].get_color()
for i in range(len(ps)-1):
    I = X[(ps[i] < X) & (X < ps[i+1])]
    ax.plot(I, f(I), c=color)
ax.plot(0, 1, 'o', c=color, mfc='w') # číslo 0 nepatrí do oboru definície

## asymptoty bez smernice
Ay = np.linspace(-3.3, 3.3)
for i in [i for i in range(1, len(ps)-1) if ps[i] != 0]:
    Ax = np.ones(len(Ay)) * ps[i]
    ax.plot(Ax, Ay, 'k--', lw=1)

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# for i in range(len(ps)-1):
#     I = X[(ps[i] < X) & (X < ps[i+1])]
#     true_false_test(ax, f, I, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [7]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return np.log(X + np.sqrt(X ** 2 + 1))
X = np.linspace(-3, 3, 6*10+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(6, 5)

## diagram
init_subplot(ax)
ax.set_aspect('equal')
ax.set_ylim(-2.2, 2.2)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \ln\,(x+\sqrt{x^2+1})$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()
In [8]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return X ** X
X = np.linspace(0, 2, 2*200+1)
X = X[X > 0] # len kladné čísla patria do oboru definície

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 8)

## diagram
init_subplot(ax)
#ax.set_aspect('equal')
ax.set_aspect(1/2)
ax.set_ylim(-4, 4)

## graf funkcie
color = ax.plot([], [], label=r"funkcia $y = x^x$")[0].get_color()
ax.plot(X, f(X), c=color)
ax.plot(0, 1, 'o', c=color, mfc='w') # číslo 0 nepatrí do oboru definície

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='right')
#fig.savefig("<meno súboru>.png")
fig.show()
In [9]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return np.cos(X) ** np.sin(X) + np.sin(X) ** np.cos(X)
X = np.linspace(0, np.pi/2, 1000+1)
X = X[(0 < X) & (X < np.pi/2)] # čísla 0 a π/2 nepatria do oboru definície

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(8, 8)

## diagram
init_subplot(ax)
ax.set_aspect('equal')

## x-ová os
xtick_numerators = range(0, 4+1)
ax.set_xticks([n * np.pi / 8  for n in xtick_numerators])
ax.set_xticklabels([smart_ticklabel(n, r"\pi", 8)  for n in xtick_numerators])

## y-ová os
ax.set_ylim(-3*np.pi/8*1.1, np.pi/2*1.1)
ytick_numerators = range(-3, 4+1)
ax.set_yticks([n * np.pi / 8  for n in ytick_numerators])
ax.set_yticklabels([smart_ticklabel(n, r"\pi", 8)  for n in ytick_numerators])

## graf funkcie
color = ax.plot([], [], label=r"funkcia $y = (\cos\,x)^{(\sin\,x)}+(\sin\,x)^{(\cos\,x)}$")[0].get_color()
ax.plot(X, f(X), c=color)
ax.plot(0, 1, 'o', c=color, mfc='w') # číslo 0 nepatrí do oboru definície
ax.plot(np.pi/2, 1, 'o', c=color, mfc='w') # číslo π/2 nepatrí do oboru definície

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# color = ax.plot([], [], label=r"derivácia $y = ldots$")[0].get_color() # tento údaj upravte
# ax.plot(dX, df(dX), c=color)
# ax.plot(0, 1, 'o', c=color, mfc='w') # číslo 0 nepatrí do oboru definície

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()

Úloha (2 body)

Nájdite deriváciu funkcie \begin{align} y = (x-1)(3x-2)^2(x+1)^3. \end{align} Overte graficky, že vaše riešenie je správne.

In [10]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return (X - 1) * (3 * X - 2) ** 2 * (X + 1) ** 3
X = np.linspace(-1.5, 1.3, 28*10+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 7)

## diagram
init_subplot(ax)
ax.set_aspect(1/8)
ax.set_ylim(-9, 9)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = (x-1)(3x-2)^2(x+1)^3$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()

Úloha (2 body)

Nájdite deriváciu funkcie \begin{align} y = \frac{x}{(1+x)^2(1-x)^3}. \end{align} Overte graficky, že vaše riešenie je správne.

In [11]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return X / ((1 + X) ** 2 * (1 - X) ** 3)
X = np.linspace(-2, 2, 4*100+1)
X1, X2, X3 = X[X < -1], X[(X > -1) & (X < 1)], X[X > 1] # čísla -1, 1 nepatria do oboru definície

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(8, 7.5)

## diagram
init_subplot(ax)
ax.set_aspect(1/5)
ax.set_ylim(-10, 10)

## graf funkcie
color = ax.plot([], [], label=r"funkcia $y = \frac{x}{(1+x)^2(1-x)^3}$")[0].get_color()
ax.plot(X1, f(X1), c=color)
ax.plot(X2, f(X2), c=color)
ax.plot(X3, f(X3), c=color)

## asymptota bez smernice
Y = np.linspace(-10, 10, 20*10+1)

Ay1 = Y
Ax1 = np.ones(len(Ay1)) * (-1)
ax.plot(Ax1, Ay1, 'k--', lw=1) # v bode -1

Ay2 = Y
Ax2 = np.ones(len(Ay2))
ax.plot(Ax2, Ay2, 'k--', lw=1) # v bode 1

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX1, dX2, dX3 = X1, X2, X3 # tento údaj upravte

## graf derivácie
# color = ax.plot([], [], label=r"derivácia $y = \ldots$")[0].get_color() # tento údaj upravte
# ax.plot(dX1, df(dX1), c=color)
# ax.plot(dX2, df(dX2), c=color)
# ax.plot(dX3, df(dX3), c=color)

## skúška správnosti
# true_false_test(ax, f, dX1, df)
# true_false_test(ax, f, dX2, df)
# true_false_test(ax, f, dX3, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()

Úloha (2 body)

Nájdite deriváciu funkcie \begin{align} y = \cos(\cos(\cos x))). \end{align} Overte graficky, že vaše riešenie je správne.

In [12]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return np.cos(np.cos(np.cos(X)))
X = np.linspace(-2*np.pi, 2*np.pi, 4*2*20+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(8, 7)

## diagram
init_subplot(ax)
ax.set_aspect(np.pi/2/0.2)
#ax.grid()

## x-ová os
xtick_numerators = range(-4, 4+1)
ax.set_xticks([n * np.pi / 2  for n in xtick_numerators])
ax.set_xticklabels([smart_ticklabel(n, r"\pi", 2)  for n in xtick_numerators])

## y-ová os
ax.set_ylim(-0.4, 1)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \cos(\cos(\cos\,x)))$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()

Úloha (2 body)

Nájdite deriváciu funkcie \begin{align} y = 2^{\cos^2 x}. \end{align} Overte graficky, že vaše riešenie je správne.

In [13]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return 2 ** np.cos(X) ** 2
X = np.linspace(-2*np.pi, 2*np.pi, 4*2*20+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(8, 6.5)

## diagram
init_subplot(ax)
ax.set_aspect(np.pi/2/0.5)
ax.grid()

## x-ová os
xtick_numerators = range(-4, 4+1)
ax.set_xticks([n * np.pi / 2  for n in xtick_numerators]) # kótovanie x-ovej osi
ax.set_xticklabels([smart_ticklabel(n, r"\pi", 2)  for n in xtick_numerators]) # označenie kót na x-ovej osi

## y-ová os
ax.set_ylim(-1.2, 2.2)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = 2^{\cos^2\,x}$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()

Úloha (2 body)

Nájdite deriváciu funkcie \begin{align} y = \ln(1 + \sin^2 x) - 2 \sin x \arctan \sin x. \end{align} Overte graficky, že vaše riešenie je správne.

In [14]:
####
#### šablóna riešenia
####

### zadanie

## vstupné údaje
def f(X): return np.log(1 + np.sin(X) ** 2) - 2 * np.sin(X) * np.arctan(np.sin(X))
X = np.linspace(-2*np.pi, 2*np.pi, 4*2*20+1)

## obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(8, 7)

## diagram
init_subplot(ax)
ax.set_aspect(np.pi/2/0.25)
#ax.grid()

## x-ová os
xtick_numerators = range(-4, 4+1)
ax.set_xticks([n * np.pi / 2  for n in xtick_numerators])
ax.set_xticklabels([smart_ticklabel(n, r"\pi", 2)  for n in xtick_numerators])

## y-ová os
ax.set_ylim(-1, 1)

## graf funkcie
ax.plot(X, f(X), label=r"funkcia $y = \ln(1 + \sin^2\,x)-2\,\sin\,x\,\arctan\,\sin\,x$")

### riešenie

## derivácia
# def df(X): return X # tento údaj upravte
# dX = X # tento údaj upravte

## graf derivácie
# ax.plot(dX, df(dX), label=r"derivácia $y = \ldots$") # tento údaj upravte

## skúška správnosti
# true_false_test(ax, f, dX, df)

### dokončenie
plt.figlegend(loc='upper center')
#fig.savefig("<meno súboru>.png")
fig.show()